This invention relates to the fields of computer systems and computer networks. In particular, the present invention relates to a Network Interface Circuit (NIC) for processing communication packets exchanged between a computer network and a host computer system.
The interface between a computer and a network is often a bottleneck for communications passing between the computer and the network. While computer performance (e.g., processor speed) has increased exponentially over the years and computer network transmission speeds have undergone similar increases, inefficiencies in the way network interface circuits handle communications have become more and more evident. With each incremental increase in computer or network speed, it becomes ever more apparent that the interface between the computer and the network cannot keep pace. These inefficiencies involve several basic problems in the way communications between a network and a computer are handled.
Today""s most popular forms of networks tend to be packet-based. These types of networks, including the Internet and many local area networks, transmit information in the form of packets. Each packet is separately created and transmitted by an originating endstation and is separately received and processed by a destination endstation. In addition, each packet may, in a bus topology network for example, be received and processed by numerous stations located between the originating and destination endstations.
One basic problem with packet networks is that each packet must be processed through multiple protocols or protocol levels (known collectively as a xe2x80x9cprotocol stackxe2x80x9d) on both the origination and destination endstations. When data transmitted between stations is longer than a certain minimal length, the data is divided into multiple portions, and each portion is carried by a separate packet. The amount of data that a packet can carry is generally limited by the network that conveys the packet and is often expressed as a maximum transfer unit (MTU). The original aggregation of data is sometimes known as a xe2x80x9cdatagram,xe2x80x9d and each packet carrying part of a single datagram is processed very similarly to the other packets of the datagram.
Communication packets are generally processed as follows. In the origination endstation, each separate data portion of a datagram is processed through a protocol stack. During this processing multiple protocol headers (e.g., TCP, IP, Ethernet) are added to the data portion to form a packet that can be transmitted across the network. The packet is received by a network interface circuit, which transfers the packet to the destination endstation or a host computer that serves the destination endstation. In the destination endstation, the packet is processed through the protocol stack in the opposite direction as in the origination endstation. During this processing the protocol headers are removed in the opposite order in which they were applied. The data portion is thus recovered and can be made available to a user, an application program, etc.
Several related packets (e.g., packets carrying data from one datagram) thus undergo substantially the same process in a serial manner (i.e., one packet at a time). The more data that must be transmitted, the more packets must be sent, with each one being separately handled and processed through the protocol stack in each direction. Naturally, the more packets that must be processed, the greater the demand placed upon an endstation""s processor. The number of packets that must be processed is affected by factors other than just the amount of data being sent in a datagram. For example, as the amount of data that can be encapsulated in a packet increases, fewer packets need to be sent. As stated above, however, a packet may have a maximum allowable size, depending on the type of network in use (e.g., the maximum transfer unit for standard Ethernet traffic is approximately 1,500 bytes). The speed of the network also affects the number of packets that a NIC may handle in a given period of time. For example, a gigabit Ethernet network operating at peak capacity may require a NIC to receive approximately 1.48 million packets per second. Thus, the number of packets to be processed through a protocol stack may place a significant burden upon a computer""s processor. The situation is exacerbated by the need to process each packet separately even though each one will be processed in a substantially similar manner.
A related problem to the disjoint processing of packets is the manner in which data is moved between xe2x80x9cuser spacexe2x80x9d (e.g., an application program""s data storage) and xe2x80x9csystem spacexe2x80x9d (e.g., system memory) during data transmission and receipt. Presently, data is simply copied from one area of memory assigned to a user or application program into another area of memory dedicated to the processor""s use. Because each portion of a datagram that is transmitted in a packet may be copied separately (e.g., one byte at a time), there is a nontrivial amount of processor time required and frequent transfers can consume a large amount of the memory bus"" bandwidth. Illustratively, each byte of data in a packet received from the network may be read from the system space and written to the user space in a separate copy operation, and vice versa for data transmitted over the network. Although system space generally provides a protected memory area (e.g., protected from manipulation by user programs), the copy operation does nothing of value when seen from the point of view of a network interface circuit. Instead, it risks over-burdening the host processor and retarding its ability to rapidly accept additional network traffic from the NIC. Copying each packet""s data separately can therefore be very inefficient, particularly in a high-speed network environment.
In addition to the inefficient transfer of data (e.g., one packet""s data at a time), the processing of headers from packets received from a network is also inefficient. Each packet carrying part of a single datagram generally has the same protocol headers (e.g., Ethernet, IP and TCP), although there may be some variation in the values within the packets"" headers for a particular protocol. Each packet, however, is individually processed through the same protocol stack, thus requiring multiple repetitions of identical operations for related packets. Successively processing unrelated packets through different protocol stacks will likely be much less efficient than progressively processing a number of related packets through one protocol stack at a time.
Another basic problem concerning the interaction between present network interface circuits and host computer systems is that the combination often fails to capitalize on the increased processor resources that are available in multi-processor computer systems. In other words, present attempts to distribute the processing of network packets (e.g., through a protocol stack) among a number of protocols in an efficient manner are generally ineffective. In particular, the performance of present NICs does not come close to the expected or desired linear performance gains one may expect to realize from the availability of multiple processors. In some multi-processor systems, little improvement in the processing of network traffic is realized from the use of more than 4-6 processors, for example.
In addition, the rate at which packets are transferred from a network interface circuit to a host computer or other communication device may fail to keep pace with the rate of packet arrival at the network interface. One element or another of the host computer (e.g., a memory bus, a processor) may be over-burdened or otherwise unable to accept packets with sufficient alacrity. In this event one or more packets may be dropped or discarded. Dropping packets may cause a network entity to re-transmit some traffic and, if too many packets are dropped, a network connection may require re-initialization. Further, dropping one packet or type of packet instead of another may make a significant difference in overall network traffic. If, for example, a control packet is dropped, the corresponding network connection may be severely affected and may do little to alleviate the packet saturation of the network interface circuit because of the typically small size of a control packet. Therefore, unless the dropping of packets is performed in a manner that distributes the effect among many network connections or that makes allowance for certain types of packets, network traffic may be degraded more than necessary.
Thus, present NICs fail to provide adequate performance to interconnect today""s high-end computer systems and high-speed networks. In addition, a network interface circuit that cannot make allowance for an over-burdened host computer may degrade the computer""s performance.
In one embodiment of the invention packets are received from a network and stored in a packet queue prior to being transferred to a host computer. If the rate of packet transfers to the host computer cannot keep pace with the rate of packet arrivals at the queue, one or more packets may be dropped. Therefore, a system and method of discarding packets in a random manner is provided, such that the effect of lost packets is fairly distributed among network communicants.
In one embodiment of the invention a packet queue that is used to store packets received from a network is divided into multiple regions. Each region is distinct yet shares a boundary with an adjacent region. In an alternative embodiment regions may overlap. A fullness gauge or indicator is employed to indicate how full the packet queue is. In particular, read and write pointers that are used to update the packet queue can also be used to determine how full the queue is. This fullness indicator thus fluctuates as the level of network traffic stored in the packet queue ebbs and flows.
For one or more of the multiple packet queue regions, a programmable probability indicator is assigned. Each probability indicator indicates the probability of dropping a packet when the fullness indicator indicates that the level of traffic stored in the queue is within the probability indicator""s associated region. Probability indicators may be programmed and re-programmed as the level of traffic in the packet queue changes. The probability indicator may take the form of a percentage or ratio that is configured to randomly select packets to be discarded.
In one particular embodiment of the invention a probability indicator takes the form of a bit or flag mask. Each bit or flag may take one of two possible values (e.g., zero and one). In this embodiment, a counter tracks the number of packets received at the packet queue by repeatedly counting through a limited range of numbers, such as zero through N. The bit or flag mask correspondingly contains N+1 bits or flags. Thus, for each counter value the corresponding bit or flag in the mask indicates whether the packet received during that counter value is dropped.
In an alternative embodiment, a random number is generated when a packet is received. The random number may be compared to a threshold to determine whether the received packet is dropped. Each region may have a separate threshold for determining whether a packet is dropped.
In yet another embodiment of the invention, a packet may be immunized or exempted from being discarded because it exhibits a particular characteristic or status. For example, a control packet may be one type of packet that is not dropped. In this embodiment, the counter is not incremented when a non-discardable packet is received. Other packets that may be exempt from discarding may be packets within a particular network connection or flow, packets associated with a particular application, packets formatted according to a particular protocol, etc. A relevant characteristic or detail of a packet may be extracted during a process in which one or more of the packet""s headers are parsed.
In one embodiment of the invention, when a probability indicator indicates that a packet should be dropped the packet that is dropped may be one just received at the packet queue. In another embodiment, however, a packet already stored in the packet queue may be dropped.